/* Copyright 2018 JDCLOUD.COM

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http:#www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

云硬盘API
云硬盘API包含云硬盘相关接口和快照相关接口。可提供批量创建云硬盘，删除云硬盘，制作云硬盘快照等功能。

OpenAPI spec version: v1
Contact: 

NOTE: This class is auto generated by the jdcloud code generator program.
*/


#ifndef DiskClient_h
#define DiskClient_h


#import <JDCloudOCSDKCore/JDCloudOCSDKCore.h>
#import <JDCloudOCSDKDisk/DiskApiModel.h>

@interface DiskClient : NSObject<JDCloudClient>{
    @private
    NSString* _userAgent;
    NSString* _serviceName;
    NSString* _version;
    }

    @property (strong,readonly,nonatomic) NSString* userAgent;

    @property (strong,readonly,nonatomic) NSString* serviceName;

    @property (strong,readonly,nonatomic) NSString* version;

    @property (strong,nonatomic) NSString* contentType;

    @property (strong,nonatomic) Credential* credential;

    @property (strong,nonatomic) SDKEnvironment* sdkEnvironment;

    @property (strong,nonatomic) NSMutableDictionary* customHeader;

    @property  (strong,nonatomic) NSString* httpRequestProtocol;

    -(void) addCustomerHeaderWithKey:(NSString*) key
    value:(NSString*) value;

    -(id)initWithGlobalConfig;

    -(id)initWithCredential:(Credential*)credential
    sdkEnvironment:(SDKEnvironment*)sdkEnvironment;
    -(id)initWithCredential:(Credential*)credential;
    /**
    modifySnapshotAttribute sync request
    @param modifySnapshotAttributeRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `modifySnapshotAttributeResponse` the request response data model
    */
    -(NSDictionary*) modifySnapshotAttributeSyncWithRequest:(DiskModifySnapshotAttributeRequest*) modifySnapshotAttributeRequest;

    -(void)modifySnapshotAttributeAsyncWithRequest:(DiskModifySnapshotAttributeRequest*) modifySnapshotAttributeRequest
    completionHandler:(void(^)(int statusCode,DiskModifySnapshotAttributeResponse* _Nullable modifySnapshotAttributeResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    deleteSnapshot sync request
    @param deleteSnapshotRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `deleteSnapshotResponse` the request response data model
    */
    -(NSDictionary*) deleteSnapshotSyncWithRequest:(DiskDeleteSnapshotRequest*) deleteSnapshotRequest;

    -(void)deleteSnapshotAsyncWithRequest:(DiskDeleteSnapshotRequest*) deleteSnapshotRequest
    completionHandler:(void(^)(int statusCode,DiskDeleteSnapshotResponse* _Nullable deleteSnapshotResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    createDisks sync request
    @param createDisksRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `createDisksResponse` the request response data model
    */
    -(NSDictionary*) createDisksSyncWithRequest:(DiskCreateDisksRequest*) createDisksRequest;

    -(void)createDisksAsyncWithRequest:(DiskCreateDisksRequest*) createDisksRequest
    completionHandler:(void(^)(int statusCode,DiskCreateDisksResponse* _Nullable createDisksResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    describeSnapshots sync request
    @param describeSnapshotsRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `describeSnapshotsResponse` the request response data model
    */
    -(NSDictionary*) describeSnapshotsSyncWithRequest:(DiskDescribeSnapshotsRequest*) describeSnapshotsRequest;

    -(void)describeSnapshotsAsyncWithRequest:(DiskDescribeSnapshotsRequest*) describeSnapshotsRequest
    completionHandler:(void(^)(int statusCode,DiskDescribeSnapshotsResponse* _Nullable describeSnapshotsResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    restoreDisk sync request
    @param restoreDiskRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `restoreDiskResponse` the request response data model
    */
    -(NSDictionary*) restoreDiskSyncWithRequest:(DiskRestoreDiskRequest*) restoreDiskRequest;

    -(void)restoreDiskAsyncWithRequest:(DiskRestoreDiskRequest*) restoreDiskRequest
    completionHandler:(void(^)(int statusCode,DiskRestoreDiskResponse* _Nullable restoreDiskResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    describeDisk sync request
    @param describeDiskRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `describeDiskResponse` the request response data model
    */
    -(NSDictionary*) describeDiskSyncWithRequest:(DiskDescribeDiskRequest*) describeDiskRequest;

    -(void)describeDiskAsyncWithRequest:(DiskDescribeDiskRequest*) describeDiskRequest
    completionHandler:(void(^)(int statusCode,DiskDescribeDiskResponse* _Nullable describeDiskResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    extendDisk sync request
    @param extendDiskRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `extendDiskResponse` the request response data model
    */
    -(NSDictionary*) extendDiskSyncWithRequest:(DiskExtendDiskRequest*) extendDiskRequest;

    -(void)extendDiskAsyncWithRequest:(DiskExtendDiskRequest*) extendDiskRequest
    completionHandler:(void(^)(int statusCode,DiskExtendDiskResponse* _Nullable extendDiskResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    modifyDiskAttribute sync request
    @param modifyDiskAttributeRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `modifyDiskAttributeResponse` the request response data model
    */
    -(NSDictionary*) modifyDiskAttributeSyncWithRequest:(DiskModifyDiskAttributeRequest*) modifyDiskAttributeRequest;

    -(void)modifyDiskAttributeAsyncWithRequest:(DiskModifyDiskAttributeRequest*) modifyDiskAttributeRequest
    completionHandler:(void(^)(int statusCode,DiskModifyDiskAttributeResponse* _Nullable modifyDiskAttributeResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    describeDisks sync request
    @param describeDisksRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `describeDisksResponse` the request response data model
    */
    -(NSDictionary*) describeDisksSyncWithRequest:(DiskDescribeDisksRequest*) describeDisksRequest;

    -(void)describeDisksAsyncWithRequest:(DiskDescribeDisksRequest*) describeDisksRequest
    completionHandler:(void(^)(int statusCode,DiskDescribeDisksResponse* _Nullable describeDisksResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    createSnapshot sync request
    @param createSnapshotRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `createSnapshotResponse` the request response data model
    */
    -(NSDictionary*) createSnapshotSyncWithRequest:(DiskCreateSnapshotRequest*) createSnapshotRequest;

    -(void)createSnapshotAsyncWithRequest:(DiskCreateSnapshotRequest*) createSnapshotRequest
    completionHandler:(void(^)(int statusCode,DiskCreateSnapshotResponse* _Nullable createSnapshotResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    describeSnapshot sync request
    @param describeSnapshotRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `describeSnapshotResponse` the request response data model
    */
    -(NSDictionary*) describeSnapshotSyncWithRequest:(DiskDescribeSnapshotRequest*) describeSnapshotRequest;

    -(void)describeSnapshotAsyncWithRequest:(DiskDescribeSnapshotRequest*) describeSnapshotRequest
    completionHandler:(void(^)(int statusCode,DiskDescribeSnapshotResponse* _Nullable describeSnapshotResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    deleteDisk sync request
    @param deleteDiskRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `deleteDiskResponse` the request response data model
    */
    -(NSDictionary*) deleteDiskSyncWithRequest:(DiskDeleteDiskRequest*) deleteDiskRequest;

    -(void)deleteDiskAsyncWithRequest:(DiskDeleteDiskRequest*) deleteDiskRequest
    completionHandler:(void(^)(int statusCode,DiskDeleteDiskResponse* _Nullable deleteDiskResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;

    /**
    disk common sync request
    @param  jdcloudDataRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
    */
    -(NSDictionary*) diskCommonSyncWithRequest:(JDCloudDataRequest*) jdcloudDataRequest
                                           url:(NSString*) url
                                        method:(NSString*) method;

    -(void)diskCommonAsyncWithRequest:(JDCloudDataRequest*) jdcloudDataRequest
                                  url:(NSString*) url
                               method:(NSString*) method
                    completionHandler:(void(^)(int statusCode, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;

    @end


    #endif /* DiskClient_h */
